This page last changed on Jul 28, 2008 by stepheneb.

SAIL/OTrunk SDS URL Generation

Table of Contents

Five Parts of an SDS URL

There are five parts to a SDS url which can be used to run a SAIL/OTrunk session:

  1. SDS Jnlp URL (required)
  2. SAIL/OTrunk OTML URL (required)
  3. Jnlp Properties (optional)
  4. Jnlp Filename (optional)
  5. SAIL Session Properties (optional)

[SDS Jnlp URL] ? sailotrunk.otmlurl = [SAIL/OTrunk OTML URL] & jnlp_filename = [Jnlp Filename] & jnlp_properties = [Jnlp Properties] & [SAIL Session Properties]

Example:

'http://rails.dev.concord.org/sds/12/offering/46212/jnlp/88565/view?sailotrunk.otmlurl=http%3A%2F%2Fcontinuum.concord.org'\
'%2Fotrunk%2Fexamples%2FUDL%2Fudl-clouds-34.otml&jnlp_filename=udl_grades_3_4_udl_clouds_sample_student_data_vernier_goio.jnlpw&'\
'jnlp_properties=otrunk.view.mode%3Dreporting%26otrunk.view.frame_title%3DUniversal%20Design%20in%20Science%20Education&extra_property=1'

1. SDS Jnlp URL

(required)

Unknown macro: {section}
Unknown macro: {column}

This is the url of the jnlp for a valid workgroup and offering in an SDS portal realm.

Example: http://rails.dev.concord.org/sds/2/offering/144/jnlp/540/view

Unknown macro: {column}

2. SAIL/OTrunk OTML URL

(required)

Unknown macro: {section}
Unknown macro: {column}

The value of the sailotrunk.otmlurl parameter references the otml that will be used by this SAIL/OTrunk session.

The sailotrunk.otmlurl parameter and value are returned as part of the <argument> element of the jnlp rendered by the SDS and are passed to the SDS a second time where it is used to specify values in the config.

The value of the sailotrunk.otmlurl parameter must be escaped.

Example:

This is a representation of how the SAIL/OTrunk OTML URL is encoded as an element of the complete config url in the <argument> element in the jnlp: (linebreaks added for clarity)

<application-desc main-class="net.sf.sail.emf.launch.EMFLauncher2">
  <argument>
    http://rails.dev.concord.org/sds/12/offering/46212/config/88565/1/view?extra_property=1&amp;
    sailotrunk.otmlurl=http%3A%2F%2Fcontinuum.concord.org%2Fotrunk%2Fexamples%2FUDL%2Fudl-clouds-34.otml
    &amp;jnlp_properties=otrunk.view.mode%3Dreporting%26otrunk.view.frame_title%3DUniversal%20Design%20in%20Science%20Education
  </argument>
</application-desc>

The url itself then appears in the 5. SAIL Session Properties section of the SDS config file like this:

<object class="java.util.Properties">
  <void method="setProperty">
    <string>sailotrunk.otmlurl</string>
    <string>http://continuum.concord.org/otrunk/examples/UDL/udl-clouds-34.otml</string>
  </void>
</object>

Right now the SDS requires this property be present even if you are also passing the otml url as a Jnlp Property.

Note: this part of the url is just a special case of a SAIL Session property see 5. SAIL Session Properties below.

Unknown macro: {column}

3. Jnlp Properties

(optional)

Unknown macro: {section}
Unknown macro: {column}

The properties passed here are added as system properties in the first <resource> element in the jnlp itself.

The value of the jnlp_properties parameter is an escaped list of properties and values in url parameter form: <key>=<value>. If you are passing multiple parameters concatenate them with "&" characters".

The entire value of the jnlp_properties parameter must be escaped.

Example 1:

  • encoded in the jnlp: &jnlp_properties=sailotrunk.hidetree%3Dfalse
  • decoded value: sailotrunk.hidetree=false

Example2 :

  • encoded in the jnlp: &jnlp_properties=otrunk.view.mode%3Dreporting%26otrunk.view.frame_title%3DUniversal%20Design%20in%20Science%20Education
  • decoded value: otrunk.view.mode=reporting&otrunk.view.frame_title=Universal Design in Science Education

Here's how Example 1 would appear in the jnlp:

<resources>
  ...
  <property name="sailotrunk.hidetree" value="false"/>
  <property name="sailotrunk.otmlurl" 
   value="http://www.telscenter.org/confluence/download/attachments/20047/Hydrogen_Cars.otml"/>
</resources>

Here's how Example 2 would appear in the jnlp:

<resources>
  ...
  <property name="otrunk.view.mode" value="reporting"/>
  <property name="otrunk.view.frame_title" value="Universal Design in Science Education"/>
  <property name="sailotrunk.otmlurl" 
   value="http://www.telscenter.org/confluence/download/attachments/20047/Hydrogen_Cars.otml"/>
</resources>
Unknown macro: {column}

4. Jnlp Filename

(optional)

Unknown macro: {section}
Unknown macro: {column}

This value will be used by the SDS to suggest a filename to the browser when it downloads and saves the jnlp.

The value of the jnlp_filename parameter must be escaped if it includes spaces (or any character that is used to parse urls).

Example:

  • parameter in jnlp: &jnlp_filename=udl_grades_3_4_udl_clouds_sample_student_data_vernier_goio.jnlp
  • suggested filename: udl_grades_3_4_udl_clouds_sample_student_data_vernier_goio.jnlp

Here are the headers that would be generated by the SDS:

Content-Type: application/x-java-jnlp-file; charset=utf-8
Content-Disposition: attachment; filename=udl_grades_3_4_udl_clouds_sample_student_data_vernier_goio.jnlp
Unknown macro: {column}

5. SAIL Session Properties

(optional)

Unknown macro: {section}
Unknown macro: {column}

SAIL session properties are passed to the SAIL session in the XMLDecoder config file generated by the SDS. These properties may be used by the SAIL session operationally. In addition they are returned as key, value attribute pairs in <launchProperties> elements contained in the <sessionBundles> element returned by the SAIL session. See: The actual learner session sessionBundles sent for an example of <launchProperties> elements in an previous <sessionBundles> being sent to a SAIL session loads learner data.

The SDS always adds these SAIL session properties to the config:

  • sds_time
  • sailotrunk.otmlurl
  • jnlp_properties

Any additional SAIL session properties you add will also be included.

When SAIL session properties are returned to the SDS in a <sessionBundles> element they will appear as key, value attribute pairs in <launchProperties> elements.

In addition to all of the SAIL session properties present in the config the maven.jnlp.version property of the jnlp is also included as a <launchProperties>.

The properties passed here are added as SAIL session properties in the config file.

The values of these parameter must be escaped if they contain characters that delimit properties in urls or are invalid in XML.

Values passed here should be in url parameter form: <key>=<value>. If you are passing multiple parameters concatenate them with "&" characters"

Example 1:

  • appended to the end of the jnlp: &extra_property=1

Here's how Example 1 would appear in the config: (note the property was added to the three default SAIL session properties)

config
  <object class="net.sf.sail.core.service.impl.LauncherServiceImpl">
    <void property="properties">
      <object class="java.util.Properties">
        <void method="setProperty">
          <string>sds_time</string>
          <string>1217257348577</string>
        </void>
        <void method="setProperty">
          <string>extra_property</string>
          <string>1</string>
        </void>
        <void method="setProperty">
          <string>sailotrunk.otmlurl</string>
          <string>http://continuum.concord.org/otrunk/examples/UDL/udl-clouds-34.otml</string>
        </void>
        <void method="setProperty">
          <string>jnlp_properties</string>
          <string>otrunk.view.mode=reporting&amp;otrunk.view.frame_title=Universal Design in Science Education</string>
        </void>
      </object>
    </void>
  </object>

Example 2:

  • appended to the end of the jnlp: &extra_property=1&sailotrunk.learnerotml.edit=true

Here's how Example 2 would appear in the config: (note the property was added to the three default SAIL session properties)

config
  <object class="net.sf.sail.core.service.impl.LauncherServiceImpl">
    <void property="properties">
      <object class="java.util.Properties">
        <void method="setProperty">
          <string>sds_time</string>
          <string>1217257348577</string>
        </void>
        <void method="setProperty">
          <string>extra_property</string>
          <string>1</string>
        </void>
        <void method="setProperty">
          <string>sailotrunk.learnerotml.edit</string>
          <string>true</string>
        </void>
        <void method="setProperty">
          <string>sailotrunk.otmlurl</string>
          <string>http://continuum.concord.org/otrunk/examples/UDL/udl-clouds-34.otml</string>
        </void>
        <void method="setProperty">
          <string>jnlp_properties</string>
          <string>otrunk.view.mode=reporting&amp;otrunk.view.frame_title=Universal Design in Science Education</string>
        </void>
      </object>
    </void>
  </object>
Unknown macro: {column}

Practical Details

Escaping characters that delimit properties or are invalid in XML

Unknown macro: {section}
Unknown macro: {column}

When properties (<key>=<value> pairs) are passed as values of one of the standard properties the '&' and '=' characters need to be escaped. In general bare "&" characters should be escaped when rendered in XML. This is not a problem for the properties passed just to the SDS but when
the SDS embeds the sailotrunk.otmlurl url in the jnlp <argument> element "&" characters must be escaped as & enitities ("&" + "amp;").

Unknown macro: {column}

A Ruby script for OTrunk SDS URL generation

Unknown macro: {section}
Unknown macro: {column}

The following Ruby script will do the proper url escaping and construction:

require 'cgi'

def escape_uri(value)
  URI.escape(value, /[#{URI::REGEXP::PATTERN::RESERVED}\s]/)
end

def make_sds_url(sds_url, options)
  jnlp_url = sds_url
  if options[:sailotrunk_otmlurl]
    jnlp_url = jnlp_url << "?sailotrunk.otmlurl=#{escape_uri(options[:sailotrunk_otmlurl])}"
  end
  if options[:jnlp_filename]
    jnlp_url = jnlp_url << "&jnlp_filename=#{escape_uri(options[:jnlp_filename])}"
  end
  if options[:jnlp_properties]
    jnlp_url = jnlp_url << "&jnlp_properties=#{escape_uri(options[:jnlp_properties])}"
  end
end

Enter the Interactive Ruby console with the shell command: irb and paste the Ruby script above into the irb
console and press return. This defines a method on the main object called: make_sds_url.

Here are some examples of it's use.

make_sds_url( "http://rails.dev.concord.org/sds/2/offering/144/jnlp/540/view",
  { :sailotrunk_otmlurl => "http://continuum.concord.org/otrunk/examples/BasicExamples/document-edit.otml",
    :jnlp_filename => "document-edit",
    :jnlp_properties => "sailotrunk.hidetree=false" } )

Which constructs this url:

"http://rails.dev.concord.org/sds/2/offering/144/jnlp/540/view?sailotrunk.otmlurl=http%3A%2F%2F
continuum.concord.org%2Fotrunk%2Fexamples%2FBasicExamples%2Fdocument-edit.otml&jnlp_filename=
document-edit&jnlp_properties=sailotrunk.hidetree%3Dfalse"
hydrogen_cars_otml = "http://www.telscenter.org/confluence/download/attachments/20047/Hydrogen_Cars.otml"

make_sds_url( "http://rails.dev.concord.org/sds/2/offering/45268/jnlp/87346",
  { :sailotrunk_otmlurl => hydrogen_cars_otml,
    :jnlp_properties => "sailotrunk.otmlurl=#{hydrogen_cars_otml}" } )

Which constructs this url:

"http://rails.dev.concord.org/sds/2/offering/45268/jnlp/87346?sailotrunk.otmlurl=http%3A%2F%2Fwww.telscenter.org%2F
confluence%2Fdownload%2Fattachments%2F20047%2FHydrogen_Cars.otml&jnlp_properties=sailotrunk.otmlurl%3Dhttp%3A%2F%2F
www.telscenter.org%2Fconfluence%2Fdownload%2Fattachments%2F20047%2FHydrogen_Cars.otml"
Unknown macro: {column}

Session Example

Requesting a Jnlp Session from the DIY

The DIY returns a redirect to the sds:

Unknown macro: {section}
Unknown macro: {column}
curl -i http://rails.dev.concord.org/udl/external_otrunk_activities/46/sail_jnlp/6/1184/view?reporting=reporting
HTTP/1.1 302 FoundDate: Sun, 27 Jul 2008 18:40:00 GMT
Server: lighttpd/1.4.15
Content-Type: text/html; charset=utf-8
Location: http://rails.dev.concord.org/sds/12/offering/46212/jnlp/88565/view?sailotrunk.otmlurl=http%3A%2F%2Fcontinuum.concord.org \
%2Fotrunk%2Fexamples%2FUDL%2Fudl-clouds-34.otml&jnlp_filename=udl_grades_3_4_udl_clouds_sample_student_data_vernier_goio.jnlp& \
jnlp_properties=otrunk.view.mode%3Dreporting%26otrunk.view.frame_title%3DUniversal%20Design%20in%20Science%20Education
X-Runtime: 0.16147
Cache-Control: no-cache
Content-Length: 430
Set-Cookie: _Universal_Design_in_Science_Education_OWCgmRUr8s1GQfrvi2SItw____session_id=1d86e32cd872d9fbe46f8d93df891747; path=/
Unknown macro: {column}

Asking the SDS for the actual Jnlp

Unknown macro: {section}
Unknown macro: {column}
curl -i 'http://rails.dev.concord.org/sds/12/offering/46212/jnlp/88565/view?sailotrunk.otmlurl=http%3A%2F%2Fcontinuum.concord.org'\
'%2Fotrunk%2Fexamples%2FUDL%2Fudl-clouds-34.otml&jnlp_filename=udl_grades_3_4_udl_clouds_sample_student_data_vernier_goio.jnlpw&'\
'jnlp_properties=otrunk.view.mode%3Dreporting%26otrunk.view.frame_title%3DUniversal%20Design%20in%20Science%20Education&extra_property=1'
HTTP/1.1 200 OK
Date: Mon, 28 Jul 2008 15:00:53 GMT
Server: lighttpd/1.4.15
Content-Type: application/x-java-jnlp-file; charset=utf-8
X-Runtime: 0.19582
ETag: "822341fd2986ad0e7ea50f68400e0c07"
Cache-Control: max-age=1
Content-Disposition: inline; filename=udl_grades_3_4_udl_clouds_sample_student_data_vernier_goio.jnlpw
Content-Length: 9494
Set-Cookie: _sds_session_id=ebd5346fdf6aeaf689a024e17dc3fcda; path=/
Connection: close
Unknown macro: {column}

The returned Jnlp

Unknown macro: {section}
Unknown macro: {column}
jnlp
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://jnlp.concord.org/dev">
  <information>
    <title>UDL (development)</title>
    <vendor>The Concord Consortium</vendor>
    <homepage href="http://udl.concord.org"/>
    <description>Universal Design in Science Education</description>
    <icon href="http://udl.concord.org/images/udl-tree-64x64-transparent.png" height="64" width="64"/>
  </information>
  <security>
    <all-permissions/>
  </security>
  <resources>
    <j2se version="1.5+" max-heap-size="128m" initial-heap-size="32m"/>
    <jar href="org/telscenter/sail-otrunk/sail-otrunk.jar" version="0.1.0-20080727.004114-539"/>
    <jar href="org/concord/otrunk/otrunk.jar" version="0.1.0-20080728.032612-546"/>
    <jar href="org/concord/framework/framework.jar" version="0.1.0-20080727.193049-225"/>
    <jar href="org/concord/frameworkview/frameworkview.jar" version="0.1.0-20080721.050225-58"/>
    <jar href="org/concord/swing/swing.jar" version="0.1.0-20080727.063646-114"/>
    <jar href="org/concord/loader/loader.jar" version="0.1.0-20080727.085826-60"/>
    <jar href="jug/jug/jug.jar" version="1.1.2"/>
    <jar href="jdom/jdom/jdom.jar" version="1.0"/>
    <jar href="org/concord/apple-support/apple-support.jar" version="0.1.0-20080727.054648-82"/>
    <jar href="org/concord/external/ekit/ekit.jar" version="1.0"/>
    <jar href="net/sf/sail/sail-core/sail-core.jar" version="0.4.5-20080727.160611-708"/>
    <jar href="commons-beanutils/commons-beanutils/commons-beanutils.jar" version="1.7.0"/>
    <jar href="commons-logging/commons-logging/commons-logging.jar" version="1.1"/>
    <jar href="commons-lang/commons-lang/commons-lang.jar" version="2.0"/>
    <jar href="commons-io/commons-io/commons-io.jar" version="1.1"/>
    <jar href="log4j/log4j/log4j.jar" version="1.2.8"/>
    <jar href="rhino/js/js.jar" version="1.6R5"/>
    <jar href="jsr223/script/script.jar" version="1.0ea"/>
    <jar href="xstream/xstream/xstream.jar" version="1.1.2"/>
    <jar href="net/sf/sail/sail-data-emf/sail-data-emf.jar" version="0.1.0-20080727.034347-704" main="true"/>
    <jar href="org/eclipse/emf/ecore/ecore.jar" version="2.2.0"/>
    <jar href="org/eclipse/emf/common/common.jar" version="2.2.0"/>
    <jar href="org/eclipse/emf/ecore-xmi/ecore-xmi.jar" version="2.2.0"/>
    <jar href="org/concord/portfolio/portfolio.jar" version="0.1.0-20080727.053807-108"/>
    <jar href="org/concord/otrunk-ui/otrunk-ui.jar" version="0.1.0-20080727.133708-236"/>
    <jar href="org/concord/external/sound/jlayer/jlayer.jar" version="1.0"/>
    <jar href="org/concord/external/sound/mp3spi/mp3spi.jar" version="1.9.4"/>
    <jar href="org/concord/external/sound/tritonus/tritonus.jar" version="0.1"/>
    <jar href="org/concord/httpclient/httpclient.jar" version="0.1.0-20080330.082248-19"/>
    <jar href="org/concord/datagraph/datagraph.jar" version="0.1.0-20080727.091444-175"/>
    <jar href="org/concord/data/data.jar" version="0.1.0-20080727.085653-154"/>
    <jar href="org/concord/graphutil/graphutil.jar" version="0.1.0-20080727.144739-160"/>
    <jar href="org/concord/graph/graph.jar" version="0.1.0-20080726.120623-84"/>
    <jar href="org/concord/collisions/collisions.jar" version="0.1.0-20080727.060300-73"/>
    <jar href="org/concord/math/math.jar" version="0.1.0-20080727.090621-66"/>
    <jar href="org/concord/external/jep/jep.jar" version="1.0"/>
    <jar href="org/concord/external/vecmath/vecmath.jar" version="2.0"/>
    <jar href="org/concord/multimedia/multimedia.jar" version="0.1.0-20080727.090344-86"/>
    <jar href="org/concord/external/animating-card-layout/animating-card-layout.jar" version="1.0"/>
    <jar href="org/concord/otrunk/data-util/data-util.jar" version="0.1.0-20080727.085542-254"/>
    <jar href="org/concord/sensor/sensor.jar" version="0.1.0-20080718.070408-103"/>
    <jar href="org/concord/external/rxtx/rxtx-comm/rxtx-comm.jar" version="2.1.7-r2"/>
    <jar href="org/concord/otrunk-mw/otrunk-mw.jar" version="0.1.0-20080727.085424-203"/>
    <jar href="org/concord/modeler/mw/mw.jar" version="2.0.0-20080727.090439-90"/>
    <jar href="org/concord/otrunk-nlogo4/otrunk-nlogo4.jar" version="0.1.0-20080725.151102-81"/>
    <jar href="org/concord/nlogo/netlogo4lite/netlogo4lite.jar" version="4.0-20080411.140821-1"/>
    <jar href="org/concord/nlogo/netlogo4app/netlogo4app.jar" version="4.0-20080410.210800-1"/>
    <jar href="org/concord/external/log/log4j/log4j.jar" version="1.2.15"/>
    <jar href="org/concord/otrunk/otrunk-phet/otrunk-phet.jar" version="0.1.0-20080726.161840-93"/>
    <jar href="org/concord/external/phet/phetballoons/phetballoons.jar" version="1.0.3"/>
    <jar href="org/concord/otrunk-cck/otrunk-cck.jar" version="0.1.0-20080727.085720-160"/>
    <jar href="org/concord/external/phet/phetcck/phetcck.jar" version="1.0.4-20080423.191458-29"/>
    <jar href="org/concord/otrunk/otrunk-velocity/otrunk-velocity.jar" version="0.1.0-20080727.185815-70"/>
    <jar href="org/apache/velocity/velocity/velocity.jar" version="1.5"/>
    <jar href="commons-collections/commons-collections/commons-collections.jar" version="3.1"/>
    <jar href="oro/oro/oro.jar" version="2.0.8"/>
    <jar href="org/apache/velocity/velocity-tools/velocity-tools.jar" version="1.3"/>
    <jar href="commons-digester/commons-digester/commons-digester.jar" version="1.8"/>
    <jar href="logkit/logkit/logkit.jar" version="1.0.1"/>
    <jar href="avalon-framework/avalon-framework/avalon-framework.jar" version="4.1.3"/>
    <jar href="commons-validator/commons-validator/commons-validator.jar" version="1.3.1"/>
    <jar href="sslext/sslext/sslext.jar" version="1.2-0"/>
    <jar href="velocity/velocity/velocity.jar" version="1.4"/>
    <jar href="velocity/velocity-dep/velocity-dep.jar" version="1.4"/>
    <jar href="org/concord/otrunk/otrunk-udl/otrunk-udl.jar" version="0.1.0-20080728.032650-505"/>
    <jar href="org/concord/otrunk-browser/otrunk-browser.jar" version="0.1.0-20080727.085805-99"/>
    <jar href="org/mozdev/mozswing/mozswing-complete/mozswing-complete.jar" version="1.0-20080221.165853-7"/>
    <jar href="org/concord/external/tts/narrator/narrator.jar" version="1.1"/>
    <jar href="org/concord/external/tts/freetts/freetts.jar" version="1.1"/>
    <jar href="org/concord/external/tts/en_us/en_us.jar" version="1.1"/>
    <jar href="org/concord/external/tts/cmutimelex/cmutimelex.jar" version="1.1"/>
    <jar href="org/concord/external/tts/cmulex/cmulex.jar" version="1.1"/>
    <jar href="org/concord/external/tts/cmudict04/cmudict04.jar" version="1.1"/>
    <jar href="org/concord/external/tts/cmu_us_kal/cmu_us_kal.jar" version="1.1"/>
    <jar href="org/concord/external/tts/cmu_time_awb/cmu_time_awb.jar" version="1.1"/>
    <jar href="org/concord/sensor-native/sensor-native.jar" version="0.1.0-20080723.084117-83"/>
    <jar href="org/concord/otrunk/ot-script/ot-script-api/ot-script-api.jar" version="0.1.0-20080727.091342-59"/>
    <jar href="org/concord/otrunk/ot-script/ot-bsf/ot-bsf.jar" version="0.1.0-20080727.120623-61"/>
    <jar href="bsf/bsf/bsf.jar" version="2.4.0"/>
    <jar href="org/concord/otrunk/ot-script/ot-javascript/ot-javascript.jar" version="0.1.0-20080727.204829-73"/>
    <jar href="org/concord/otrunk/ot-script/ot-script-view/ot-script-view.jar" version="0.1.0-20080727.085853-44"/>
    <jar href="org/concord/sensor/sensor-vernier/sensor-vernier.jar" version="0.1.0-20080722.165802-62"/>
    <jar href="org/concord/sensor/labpro-usb/labpro-usb.jar" version="0.1.0-20080727.085630-50"/>
    <jar href="org/concord/sensor/sensor-dataharvest/sensor-dataharvest.jar" version="0.1.0-20070607.155431-8"/>
    <jar href="org/concord/ftdi-serial-wrapper/ftdi-serial-wrapper.jar" version="0.1.0-20080726.232107-64"/>
    <property name="maven.jnlp.version" value="udl-otrunk-0.1.0-20080728.032858"/>
    <property name="freetts.voices" value="com.sun.speech.freetts.en.us.cmu_us_kal.KevinVoiceDirectory"/>
    <property name="otrunk.view.mode" value="reporting"/>
    <property name="otrunk.view.frame_title" value="Universal Design in Science Education"/>
  </resources>
  <resources os="Linux">
    <nativelib href="org/concord/external/rxtx/rxtx-serial/rxtx-serial-linux-nar.jar" version="2.1.7-r2"/>
  </resources>
  <resources os="Windows">
    <nativelib href="org/concord/external/tts/quadmore/quadmore-win32-nar.jar" version="1.0-20080128.214245-1"/>
    <nativelib href="org/concord/sensor/vernier/vernier-goio/vernier-goio-win32-nar.jar" version="1.0.0"/>
    <nativelib href="org/concord/sensor/labpro-usb-native/labpro-usb-native-win32-nar.jar" version="0.1.0-20070606.192155-3"/>
    <nativelib href="org/concord/ftdi-serial-wrapper-native/ftdi-serial-wrapper-native-win32-nar.jar" version="0.1.0-20070303.181906-4"/>
    <nativelib href="org/concord/external/rxtx/rxtx-serial/rxtx-serial-win32-nar.jar" version="2.1.7-r2"/>
  </resources>
  <resources os="Mac OS X">
    <nativelib href="org/mozdev/mozswing/mozswing-cocoautils/mozswing-cocoautils-macosx-nar.jar" version="1.0-20080124.063453-1"/>
    <nativelib href="org/concord/sensor/vernier/vernier-goio/vernier-goio-macosx-nar.jar" version="1.0.0"/>
    <nativelib href="org/concord/external/rxtx/rxtx-serial/rxtx-serial-macosx-nar.jar" version="2.1.7-r2"/>
  </resources>
  <application-desc main-class="net.sf.sail.emf.launch.EMFLauncher2">
    <argument>http://rails.dev.concord.org/sds/12 ...full url visible below ... esign%20in%20Science%20Education</argument>
  </application-desc>
</jnlp>

Because of confluences inability to wrap content in a block here is the url in the jnlp argument above

'http://rails.dev.concord.org/sds/12/offering/46212/config/88565/1/view?extra_property=1&'\
'amp;sailotrunk.otmlurl=http%3A%2F%2Fcontinuum.concord.org%2Fotrunk%2Fexamples%2FUDL%2Fudl-clouds-34.otm'\
'l&amp;jnlp_properties=otrunk.view.mode%3Dreporting%26otrunk.view.frame_title%3DUniversal%20Design%20in%20Science%20Education'
Unknown macro: {column}

Using the Jnlp argument to request the Config

Unknown macro: {section}
Unknown macro: {column}
$ curl -i 'http://rails.dev.concord.org/sds/12/offering/46212/config/88565/1/view?extra_property=1'\
'&amp;sailotrunk.otmlurl=http%3A%2F%2Fcontinuum.concord.org%2Fotrunk%2Fexamples%2FUDL%2Fudl-clouds-34.otml&amp;'\
'jnlp_properties=otrunk.view.mode%3Dreporting%26otrunk.view.frame_title%3DUniversal%20Design%20in%20Science%20Education'
HTTP/1.1 200 OK
Date: Mon, 28 Jul 2008 15:02:28 GMT
Server: lighttpd/1.4.15
Content-Type: application/xml; charset=utf-8
X-Runtime: 0.16595
ETag: "03781e873330500b49eb619f0204e8a3"
Cache-Control: private, max-age=0, must-revalidate
Content-Length: 2293
Set-Cookie: _sds_session_id=f0a032225c95dc59d2a83f561003cab5; path=/
Connection: close
Unknown macro: {column}

The actual Config file

Unknown macro: {section}
Unknown macro: {column}

The config file is an XMLDecoder Java serialization:

config
<?xml version="1.0" encoding="UTF-8"?>
<java class="java.beans.XMLDecoder" version="1.4.0">
  <object class="net.sf.sail.emf.launch.ConsoleLogServiceImpl">
  </object>
  <object class="org.telscenter.sailotrunk.OtmlUrlCurnitProvider">
    <void property="viewSystem">
      <boolean>true</boolean>
    </void>
  </object>
  <object class="net.sf.sail.emf.launch.PortfolioManagerService">
    <void property="portfolioUrlProvider">
      <object class="net.sf.sail.emf.launch.XmlUrlStringProviderImpl">
        <void property="urlString">
          <string>http://rails.dev.concord.org/sds/12/offering/46212/bundle/88565/1</string>
        </void>
      </object>
    </void>
  </object>
  <object class="net.sf.sail.core.service.impl.LauncherServiceImpl">
    <void property="properties">
      <object class="java.util.Properties">
        <void method="setProperty">
          <string>sds_time</string>
          <string>1217257348577</string>
        </void>
        <void method="setProperty">
          <string>extra_property</string>
          <string>1</string>
        </void>
        <void method="setProperty">
          <string>sailotrunk.otmlurl</string>
          <string>http://continuum.concord.org/otrunk/examples/UDL/udl-clouds-34.otml</string>
        </void>
        <void method="setProperty">
          <string>jnlp_properties</string>
          <string>otrunk.view.mode=reporting&amp;otrunk.view.frame_title=Universal Design in Science Education</string>
        </void>
      </object>
    </void>
  </object>
  <object class="net.sf.sail.emf.launch.EMFSailDataStoreService2"/>
  <object class="net.sf.sail.core.service.impl.UserServiceImpl">
    <void property="participants">
      <void method="add">
        <object class="net.sf.sail.core.entity.User">
          <object class="net.sf.sail.core.uuid.UserUuid">
            <string>326ec5d8-5a6e-11dd-9761-0014c2c34555</string>
          </object>
          <string>Sue Banner</string>
        </object>
      </void>
    </void>
    <void property="userLookupService">
      <object class="net.sf.sail.core.service.impl.UserLookupServiceImpl"/>
    </void>
  </object>
  <object class="net.sf.sail.core.service.impl.SessionLoadMonitor"/>
  <object class="net.sf.sail.core.service.impl.SessionManagerImpl"/>
</java>
Unknown macro: {column}

Requesting the learner session bundle

The previous learner session bundle is requested with urlString in the the portfolioUrlProvider:

Unknown macro: {section}
Unknown macro: {column}
curl -i 'http://rails.dev.concord.org/sds/12/offering/46212/bundle/88565/1'
HTTP/1.1 200 OK
Date: Sun, 27 Jul 2008 18:22:30 GMT
Server: lighttpd/1.4.15
Content-Type: text/xml; charset=utf-8
last-modified: Fri Jul 25 17:30:00 UTC 2008
X-Runtime: 0.11231
ETag: "416c04ac245fb6b07794529ed3e0688e"
Cache-Control: private, max-age=0, must-revalidate
Content-Length: 2291
Content-MD5: 416c04ac245fb6b07794529ed3e0688e
Set-Cookie: _sds_session_id=349d4547cbed1ce387d76ae02f020084; path=/
Unknown macro: {column}

The actual learner session sessionBundles sent

And the bundle itself is returned as an EMF xml serialization:

sessionBundles
<sailuserdata:EPortfolio xmlns:xmi="http://www.omg.org/XMI" xmlns:sailuserdata="sailuserdata" xmi:version="2.0">
  <sessionBundles xmlns:xmi="http://www.omg.org/XMI" xmlns:sailuserdata="sailuserdata" 
    start="2008-07-25T13:27:35.182-0400" 
    stop="2008-07-25T13:29:59.495-0400" 
    curnitUUID="cccccccc-0009-0000-0000-000000000000" 
    sessionUUID="ab65115f-d720-42d1-bf16-932ba6992400" 
    lastModified="2008-07-25T13:29:38.958-0400" 
    timeDifference="-804" localIP="63.138.152.193">
    <sockParts podId="dddddddd-0002-0000-0000-000000000000" rimName="ot.learner.data" rimShape="[B">
      <sockEntries value="H4sIAAAAAAAAAM ...aprox 900 characters deleted ... TyfxgV0EQAA" millisecondsOffset="124579"/>
    </sockParts>
    <agents role="RUN_WORKGROUP">
      <users>326ec5d8-5a6e-11dd-9761-0014c2c34555</users>
    </agents>
    <sdsReturnAddresses>http://rails.dev.concord.org/sds/12/offering/46212/bundle/88565/1</sdsReturnAddresses>
    <launchProperties key="maven.jnlp.version" value="udl-otrunk-0.1.0-20080725.171041"/>
    <launchProperties key="sds_time" value="1217006855182"/>
    <launchProperties key="sailotrunk.otmlurl" value="http://continuum.concord.org/otrunk/examples/UDL/udl-clouds-34.otml"/>
    <launchProperties key="jnlp_properties" value="otrunk.view.frame_title=UDL - 46: Grades 3-4: UDL Clouds (sample student data)"/>
  </sessionBundles>
</sailuserdata:EPortfolio>
Unknown macro: {column}
Unknown macro: {column}
Unknown macro: {section}
Document generated by Confluence on Jan 27, 2014 16:52